package com.lichuang.dedao.user.controller;


import com.lichuang.dedao.user.entity.User;
import com.lichuang.dedao.user.enums.Education;
import com.lichuang.dedao.user.service.impl.UserServiceImpl;
import com.lichuang.dedao.user.utils.BeanUtil;
import com.lichuang.dedao.user.vo.UserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <p>
 * 用户 前端控制器
 * </p>
 *
 * @author hanghang
 * @since 2019-07-12
 */
@RestController
@RequestMapping("//user")
public class UserController {

    @Autowired
    private UserServiceImpl userService;

    /**
     * 发送短信验证码
     *
     * @param phone
     */
    @RequestMapping("/sendSms")
    public void sendSms(String phone) {
        userService.sendSms(phone);
    }

    /**
     * 校验验证码
     *
     * @param phone
     * @param newCode
     * @return true验证成功    false验证失败
     */
    @RequestMapping("/validationCode")
    public boolean validationCode(String phone, Integer newCode) {
        return userService.validationCode(phone, newCode);
    }

    /**
     * 调用前必须通过验证码验证
     * 登录，如果用户没有注册则自动注册
     *
     * @param phone
     * @param response
     * @return
     */
    @PostMapping("/loginAndRegistry")
    public User loginAndRegistry(String phone, HttpServletResponse response) {
        return userService.loginAndRegistry(phone, response);
    }

    /**
     * 通过密码登录
     * 必须传入手机号和密码${@link User}
     *
     * @param userParam
     * @return
     */
    @PostMapping("/loginWithPassword")
    public User loginWithPassword(User userParam) {
        return userService.loginWithPassword(userParam);
    }

    /**
     * 拿到当前登录用户的信息（本服务使用）
     *
     * @param loginToken
     * @return
     */
    @RequestMapping("/getCurrentLoginUser")
    public User getCurrentLoginUser(@CookieValue(value = "loginToken", required = false) String loginToken) {
        return userService.getCurrentLoginUser(loginToken);
    }

    // 个人信息界面如何显示枚举(利用VO层，VO层继承entity，将entity属性拷贝到VO层，再对VO层的新数据做处理)

    /**
     * 读取用户的个人信息
     *
     * @param loginToken
     * @return
     */
    @RequestMapping("/showUserInfo")
    public UserVO showUserInfo(@CookieValue(value = "loginToken", required = false) String loginToken) {
        return userService.showUserInfo(loginToken);
    }

    /**
     * 拿到当前登录用户的信息（提供其他服务调用）
     *
     * @param loginToken
     * @return
     */
    @RequestMapping("/getCurrentUser")
    public User getCurrentUser(String loginToken) {
        return userService.getCurrentLoginUser(loginToken);
    }

    /**
     * 更新用户信息，直接传入User中的字段即可${@link User}
     *
     * @param loginToken
     * @param user
     * @return
     */
    @RequestMapping("/updateUser")
    public User update(@CookieValue("loginToken") String loginToken, User user) {
        return userService.updateUserWithRedis(user, loginToken);
    }

    /**
     * 通过id查询用户信息
     *
     * @param id 用户id
     * @return 用户信息
     */
    @RequestMapping("/selectUserById")
    public User selectUserById(Integer id) {
        return userService.selectUserById(id);
    }

    /**
     * 当前用户关注人的集合
     *
     * @param userId 用户id
     * @return 用户集合
     */
    @RequestMapping("/selectFollowedUser")
    public List<User> selectFollowedUser(Integer userId) {
        return userService.selectFollowedUser(userId);
    }

    /**
     * 当前用户粉丝的集合
     *
     * @param userId 用户id
     * @return 用户集合
     */
    @RequestMapping("/selectFollowerUser")
    public List<User> selectFollowerUser(Integer userId) {
        return userService.selectFollowerUser(userId);
    }

}
